package com.suzka.controller;

import com.suzka.pojo.DrugCharge;
import com.suzka.service.DrugChargeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;
import java.util.List;

/**
 * REST控制器类，用于处理药品费用相关的HTTP请求
 * 基础路径为"/charges"，支持跨域访问
 */
@RestController
@RequestMapping("/charges")
@CrossOrigin
public class DrugChargeController {

    //依赖注入
    @Autowired
    private DrugChargeService drugChargeService;

    /**
     * 获取所有药品费用记录
     * @return 包含所有药品费用记录的响应实体，状态码为200
     */
    @GetMapping
    public ResponseEntity<List<DrugCharge>> findAll() {
        return ResponseEntity.ok(drugChargeService.findAll());
    }

    /**
     * 根据ID获取单个药品费用记录
     * @param id 药品费用记录ID
     * @return 如果找到则返回包含该记录的响应实体（状态码200），否则返回404状态
     */
    @GetMapping("/{id}")
    public ResponseEntity<DrugCharge> findById(@PathVariable Integer id) {
        DrugCharge charge = drugChargeService.findById(id);
        return charge != null ? ResponseEntity.ok(charge) : ResponseEntity.notFound().build();
    }

    /**
     * 保存药品费用记录
     * @param drugCharge 要保存的药品费用记录对象（通过请求体传递）
     * @return 包含操作结果的响应实体，状态码为200
     */
    @PostMapping
    public ResponseEntity<Boolean> save(@RequestBody DrugCharge drugCharge) {
        return ResponseEntity.ok(drugChargeService.save(drugCharge));
    }

    /**
     * 更新药品费用记录
     * @param id 要更新的记录ID
     * @param drugCharge 包含更新数据的药品费用对象
     * @return 包含操作结果的响应实体，状态码为200
     */
    @PutMapping("/{id}")
    public ResponseEntity<Boolean> update(@PathVariable Integer id, @RequestBody DrugCharge drugCharge) {
        drugCharge.setId(id);
        return ResponseEntity.ok(drugChargeService.update(drugCharge));
    }

    /**
     * 根据ID删除药品费用记录
     * @param id 要删除的记录ID
     * @return 包含操作结果的响应实体，状态码为200
     */
    @DeleteMapping("/{id}")
    public ResponseEntity<Boolean> deleteById(@PathVariable Integer id) {
        return ResponseEntity.ok(drugChargeService.deleteById(id));
    }

    /**
     * 根据客户ID查询相关药品费用记录
     * @param customerId 客户ID
     * @return 包含查询结果的响应实体，状态码为200
     */
    @GetMapping("/customer/{customerId}")
    public ResponseEntity<List<DrugCharge>> findByCustomerId(@PathVariable Integer customerId) {
        return ResponseEntity.ok(drugChargeService.findByCustomerId(customerId));
    }

    /**
     * 根据药品ID查询相关费用记录
     * @param drugId 药品ID
     * @return 包含查询结果的响应实体，状态码为200
     */
    @GetMapping("/drug/{drugId}")
    public ResponseEntity<List<DrugCharge>> findByDrugId(@PathVariable Integer drugId) {
        return ResponseEntity.ok(drugChargeService.findByDrugId(drugId));
    }

    /**
     * 根据日期范围查询药品费用记录
     * @param startDate 开始日期（ISO格式）
     * @param endDate 结束日期（ISO格式）
     * @return 包含查询结果的响应实体，状态码为200
     */
    @GetMapping("/date-range")
    public ResponseEntity<List<DrugCharge>> findByDateRange(
            @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime startDate,
            @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime endDate) {
        return ResponseEntity.ok(drugChargeService.findByDateRange(startDate, endDate));
    }
}
